package com.wyf.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * 设置请求域
 *   1. 使用ModelAndView 对象
 *     addObject({key}, {value})
 *   2. 使用HttpServletRequest对象
 *     setAttribute({key}, {value})
 *   3. 使用Mode 对象
 *     addAttribute({key}, {value})
 *   4. 使用ModelMap对象
 *     addAttribute({key}, {value})
 *   5. 使用Map对象
 *     put({key}, {value})
 */
@Controller
@RequestMapping("/data")
public class DataController {

    /**
     * 1. 使用ModelAndView 对象
     *    addObject({key}, {value})
     * @return
     */
    @RequestMapping("/data01")
    public ModelAndView data01() {
        // new 对象的同时，设置view名
        ModelAndView modelAndView = new ModelAndView("data");
        modelAndView.addObject("msg", "设置请求域，通过ModelAndView对象");
        return modelAndView;
    }

    /**
     * 2. 使用HttpServletRequest对象
     *   setAttribute({key}, {value})
     * @param httpServletRequest
     * @return
     */
    @RequestMapping ("/data02")
    public String data02(HttpServletRequest httpServletRequest) {
        // 设置请求域
        httpServletRequest.setAttribute("msg", "通过HttpServletRequest对象设置请求域");
        // 返回试图名称
        return "data";
    }

    /**
     * 3. 使用Mode 对象
     *   addAttribute({key}, {value})
     * @param model
     * @return
     */
    @RequestMapping ("/data03")
    public String data03(Model model) {
        // 设置请求域
        model.addAttribute("msg", "通过Model对象设置请求域");
        // 返回试图名称
        return "data";
    }

    /**
     * 4. 使用ModeMap 对象
     *   addAttribute({key}, {value})
     * @param modelMap
     * @return
     */
    @RequestMapping ("/data04")
    public String data04(ModelMap modelMap) {
        // 设置请求域
        modelMap.addAttribute("msg", "通过ModelMap对象设置请求域");
        // 返回试图名称
        return "data";
    }

    /**
     * 4. 使用Map 对象
     *     put({key}, {value})
     * @param map
     * @return
     */
    @RequestMapping ("/data05")
    public String data05(Map map) {
        // 设置请求域
        map.put("msg", "通过Map对象设置请求域");
        // 返回试图名称
        return "data";
    }
}
